package stack.有效的括号;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Stack;

//给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。
//
// 有效字符串需满足：
//
//
// 左括号必须用相同类型的右括号闭合。
// 左括号必须以正确的顺序闭合。
//
//
//
//
// 示例 1：
//
//
//输入：s = '()'
//输出：true
//
//
// 示例 2：
//
//
//输入：s = '()[]{}'
//输出：true
//
//
// 示例 3：
//
//
//输入：s = '(]'
//输出：false
//
//
// 示例 4：
//
//
//输入：s = '([)]'
//输出：false
//
//
// 示例 5：
//
//
//输入：s = '{[]}'
//输出：true
//
//
//
// 提示：
//
//
// 1 <= s.length <= 104
// s 仅由括号 '()[]{}' 组成
//
// Related Topics 栈 字符串
// 👍 2179 👎 0
public class Solution {
    public static void main(String[] args) {


    }
    public static boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        Map<Character, Character> map = new HashMap();
        map.put('(',')');
        map.put('{','}');
        map.put('[',']');
        for (int i = 0; i < s.length(); i++) {
            if (map.containsKey(s.charAt(i))) {
                stack.push(s.charAt(i));
            } else {
                if(stack.isEmpty()){
                    return false ;
                }
                Character c = stack.pop();
                Character value = map.get(c);
                if (!value.equals(s.charAt(i))) {
                    return false;
                }
            }
        }
        return stack.isEmpty();
    }

}
